/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * AdminAddRestaurantGui.java
 *
 * Created on 4 Φεβ 2012, 5:30:42 μμ
 */

package gui;

import HelperClasses.Messages.ErrorMessage;
import HelperClasses.Messages.InformationMessage;
import HelperClasses.Messages.TerminateQuestion;
import HelperClasses.PopulateListAndComboBoxes.ComplexItem;
import HelperClasses.PopulateListAndComboBoxes.CreateAreaComboBoxModel;
import HelperClasses.PopulateListAndComboBoxes.CreateCategoryListModel;
import HelperClasses.PopulateListAndComboBoxes.CreatePriceRangeComboBoxModel;
import HelperClasses.PopulateListAndComboBoxes.FindComboBoxItem;
import HelperClasses.PopulateListAndComboBoxes.FindListItem;
import ImageFileSelector.ImageFileDialog;
import ImageFileSelector.JPanelExtentedImage;
import entertainmentguide.entity.Restaurant;
import entertainmentguide.entity.User;
import java.io.File;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import manageDataBase.DBManager;

/**
 *
 * 
 */
public class AdminUpdateRestaurant2Gui extends javax.swing.JFrame {

    // ο τρέχων χρήστης
    static public  User loggedUser = new User(); 
    // μεταβλητή = ID του τρέχοντος Εστιατορίου
    static  int currentRestaurantID;
    // βοηθητικό extended JPANEL component για να δείχνει την φωτογραφία
    private JPanelExtentedImage newxPanel =null;
    // στιγμιότυπο στο οποίο γίνονται bind τα components 
    Restaurant formRestaurant=new Restaurant();
     
    /** Creates new form AdminAddRestaurantGui */
    public AdminUpdateRestaurant2Gui() {
        initComponents();
         formRestaurantInit();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        LogoLabel = new javax.swing.JLabel();
        BackgroundColorPanel = new javax.swing.JPanel();
        AddRestaurantButton = new javax.swing.JButton();
        UpdateRestaurantButton = new javax.swing.JButton();
        DeleteRestaurantButton = new javax.swing.JButton();
        ExitButton = new javax.swing.JButton();
        TitleLabel = new javax.swing.JLabel();
        UpdateEntryPanel = new javax.swing.JPanel();
        NameLabel = new javax.swing.JLabel();
        NameTextField = new javax.swing.JTextField();
        AddressLabel = new javax.swing.JLabel();
        AddressTextField = new javax.swing.JTextField();
        AreaLabel = new javax.swing.JLabel();
        AreaComboBox = new javax.swing.JComboBox();
        PhoneLabel = new javax.swing.JLabel();
        PhoneTextField = new javax.swing.JTextField();
        CategoryLabel = new javax.swing.JLabel();
        CategoryScrollPane = new javax.swing.JScrollPane();
        CategoryList = new javax.swing.JList();
        InformationLabel = new javax.swing.JLabel();
        InformationTextField = new javax.swing.JTextField();
        DescriptionLabel = new javax.swing.JLabel();
        PriceRangeLabel = new javax.swing.JLabel();
        PriceRangeComboBox = new javax.swing.JComboBox();
        PhotoLabel = new javax.swing.JLabel();
        AddPhotoButton = new javax.swing.JButton();
        RemovePhotoButton = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        DescriptionTextArea = new javax.swing.JTextArea();
        UpdateEntryButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Restaurant Guide");
        setMinimumSize(new java.awt.Dimension(800, 800));
        setPreferredSize(new java.awt.Dimension(800, 800));
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });
        getContentPane().setLayout(null);

        LogoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/thessaloniki-restaurants.jpg"))); // NOI18N
        getContentPane().add(LogoLabel);
        LogoLabel.setBounds(0, 0, 400, 120);

        BackgroundColorPanel.setBackground(new java.awt.Color(255, 153, 102));
        BackgroundColorPanel.setPreferredSize(new java.awt.Dimension(180, 500));
        BackgroundColorPanel.setLayout(null);

        AddRestaurantButton.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        AddRestaurantButton.setText("Εισαγωγή Νέου");
        AddRestaurantButton.setEnabled(false);
        AddRestaurantButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                AddRestaurantButtonActionPerformed(evt);
            }
        });
        BackgroundColorPanel.add(AddRestaurantButton);
        AddRestaurantButton.setBounds(10, 38, 153, 21);

        UpdateRestaurantButton.setBackground(new java.awt.Color(255, 255, 0));
        UpdateRestaurantButton.setFont(new java.awt.Font("Tahoma", 1, 10)); // NOI18N
        UpdateRestaurantButton.setText("Τροποποίηση");
        UpdateRestaurantButton.setEnabled(false);
        UpdateRestaurantButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                UpdateRestaurantButtonActionPerformed(evt);
            }
        });
        BackgroundColorPanel.add(UpdateRestaurantButton);
        UpdateRestaurantButton.setBounds(10, 79, 153, 21);

        DeleteRestaurantButton.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        DeleteRestaurantButton.setText("Διαγραφή Εστιατορίου");
        DeleteRestaurantButton.setEnabled(false);
        DeleteRestaurantButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                DeleteRestaurantButtonActionPerformed(evt);
            }
        });
        BackgroundColorPanel.add(DeleteRestaurantButton);
        DeleteRestaurantButton.setBounds(10, 120, 153, 21);

        ExitButton.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        ExitButton.setText("Έξοδος");
        ExitButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ExitButtonActionPerformed(evt);
            }
        });
        BackgroundColorPanel.add(ExitButton);
        ExitButton.setBounds(10, 161, 153, 21);

        getContentPane().add(BackgroundColorPanel);
        BackgroundColorPanel.setBounds(0, 126, 180, 500);

        TitleLabel.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        TitleLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        TitleLabel.setText("Τροποποίηση Εστιατορίου");
        TitleLabel.setPreferredSize(new java.awt.Dimension(310, 30));
        getContentPane().add(TitleLabel);
        TitleLabel.setBounds(410, 50, 310, 30);

        UpdateEntryPanel.setBackground(new java.awt.Color(255, 255, 204));
        UpdateEntryPanel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
        UpdateEntryPanel.setMinimumSize(new java.awt.Dimension(530, 430));
        UpdateEntryPanel.setPreferredSize(new java.awt.Dimension(530, 430));
        UpdateEntryPanel.setRequestFocusEnabled(false);
        UpdateEntryPanel.setLayout(null);

        NameLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        NameLabel.setText("Όνομα Εστιατορίου :");
        UpdateEntryPanel.add(NameLabel);
        NameLabel.setBounds(12, 16, 115, 14);
        UpdateEntryPanel.add(NameTextField);
        NameTextField.setBounds(137, 13, 258, 20);

        AddressLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        AddressLabel.setText("Διεύθυνση :");
        UpdateEntryPanel.add(AddressLabel);
        AddressLabel.setBounds(62, 45, 65, 14);
        UpdateEntryPanel.add(AddressTextField);
        AddressTextField.setBounds(137, 39, 258, 20);

        AreaLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        AreaLabel.setText("Περιοχή :");
        UpdateEntryPanel.add(AreaLabel);
        AreaLabel.setBounds(77, 68, 50, 14);

        AreaComboBox.setModel(areaComboBoxModel());
        AreaComboBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                AreaComboBoxItemStateChanged(evt);
            }
        });
        UpdateEntryPanel.add(AreaComboBox);
        AreaComboBox.setBounds(137, 65, 258, 20);

        PhoneLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        PhoneLabel.setText("Τηλέφωνο :");
        UpdateEntryPanel.add(PhoneLabel);
        PhoneLabel.setBounds(62, 99, 65, 14);
        UpdateEntryPanel.add(PhoneTextField);
        PhoneTextField.setBounds(137, 96, 258, 20);

        CategoryLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        CategoryLabel.setText("Κατηγορία :");
        UpdateEntryPanel.add(CategoryLabel);
        CategoryLabel.setBounds(62, 140, 65, 14);

        CategoryList.setModel(categoryListModel());
        CategoryList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                CategoryListValueChanged(evt);
            }
        });
        CategoryScrollPane.setViewportView(CategoryList);

        UpdateEntryPanel.add(CategoryScrollPane);
        CategoryScrollPane.setBounds(137, 122, 258, 53);

        InformationLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        InformationLabel.setText("Πληροφορίες :");
        UpdateEntryPanel.add(InformationLabel);
        InformationLabel.setBounds(47, 184, 80, 14);
        UpdateEntryPanel.add(InformationTextField);
        InformationTextField.setBounds(137, 181, 258, 20);

        DescriptionLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        DescriptionLabel.setText("Περιγραφή :");
        UpdateEntryPanel.add(DescriptionLabel);
        DescriptionLabel.setBounds(60, 234, 67, 14);

        PriceRangeLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        PriceRangeLabel.setText("Εύρος Τιμών :");
        UpdateEntryPanel.add(PriceRangeLabel);
        PriceRangeLabel.setBounds(52, 284, 75, 14);

        PriceRangeComboBox.setModel(priceComboBoxModel());
        PriceRangeComboBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                PriceRangeComboBoxItemStateChanged(evt);
            }
        });
        UpdateEntryPanel.add(PriceRangeComboBox);
        PriceRangeComboBox.setBounds(137, 281, 258, 20);

        PhotoLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        PhotoLabel.setText("Φωτογραφία :");
        UpdateEntryPanel.add(PhotoLabel);
        PhotoLabel.setBounds(49, 338, 78, 14);

        AddPhotoButton.setText("Προσθήκη");
        AddPhotoButton.setMaximumSize(new java.awt.Dimension(110, 40));
        AddPhotoButton.setMinimumSize(new java.awt.Dimension(110, 40));
        AddPhotoButton.setPreferredSize(new java.awt.Dimension(110, 40));
        AddPhotoButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                AddPhotoButtonActionPerformed(evt);
            }
        });
        UpdateEntryPanel.add(AddPhotoButton);
        AddPhotoButton.setBounds(280, 310, 110, 40);

        RemovePhotoButton.setText("Αφαίρεση");
        RemovePhotoButton.setMaximumSize(new java.awt.Dimension(110, 40));
        RemovePhotoButton.setMinimumSize(new java.awt.Dimension(110, 40));
        RemovePhotoButton.setPreferredSize(new java.awt.Dimension(110, 40));
        RemovePhotoButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                RemovePhotoButtonActionPerformed(evt);
            }
        });
        UpdateEntryPanel.add(RemovePhotoButton);
        RemovePhotoButton.setBounds(280, 360, 110, 40);

        DescriptionTextArea.setColumns(20);
        DescriptionTextArea.setRows(5);
        jScrollPane1.setViewportView(DescriptionTextArea);

        UpdateEntryPanel.add(jScrollPane1);
        jScrollPane1.setBounds(140, 210, 250, 66);

        getContentPane().add(UpdateEntryPanel);
        UpdateEntryPanel.setBounds(190, 126, 530, 430);

        UpdateEntryButton.setText("Ενημέρωση");
        UpdateEntryButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                UpdateEntryButtonActionPerformed(evt);
            }
        });
        getContentPane().add(UpdateEntryButton);
        UpdateEntryButton.setBounds(364, 566, 140, 60);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void AddRestaurantButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_AddRestaurantButtonActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_AddRestaurantButtonActionPerformed

    private void UpdateRestaurantButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_UpdateRestaurantButtonActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_UpdateRestaurantButtonActionPerformed

    private void DeleteRestaurantButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_DeleteRestaurantButtonActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_DeleteRestaurantButtonActionPerformed

    private void ExitButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ExitButtonActionPerformed
        AdminUpdateRestaurantGui.loggedUser = this.loggedUser;
        JFrame AdminUpdateRestaurantForm = new AdminUpdateRestaurantGui();
        AdminUpdateRestaurantForm.setBounds(50, 100, 800, 800);
        AdminUpdateRestaurantForm.setLocationRelativeTo(null); // possition center of screen
        AdminUpdateRestaurantForm.setResizable(false); // not resizeable
        AdminUpdateRestaurantForm.setVisible(true); // show AdministratorMain
        dispose();
}//GEN-LAST:event_ExitButtonActionPerformed

    private void AddPhotoButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_AddPhotoButtonActionPerformed
        // δείχνω το Image File Dialog Selector
        ImageFileDialog ifd = new ImageFileDialog(AdminUpdateRestaurant2Gui.this);
        File fl = ifd.open();
        // if file is selected 
        if (!(fl==null)){
            // εαν το image panel υπάρχει το διαγράφω 
            if (!(newxPanel==null)){
                UpdateEntryPanel.remove(newxPanel);
            }
            // θέτω την εικόνα από το επιλεγμένο αρχείο
            // στην στατική μεταβλητή ImagePath, αφού αλλάξει κλίμακα
            // παράλληλα σώζω την εικόνα στο δίσκο 
            // και αποθηκεύω το path της εικόνας στην μεταβλητή ImageFilePath 
            JPanelExtentedImage.scaleAndStore(fl.getPath(), 200, 100, this);
            // δημιουργώ νέο image panel 
            // διαβάζει την εικόνα από την στατική μεταβλητή ImageFileIcon 
            newxPanel = new JPanelExtentedImage();
            // προσθέτω το image panel στην φόρμα
            UpdateEntryPanel.add(newxPanel);
            // θέτω τις συντεταγμένες του νέου panel στην φόρμα
            newxPanel.setBounds(140, 310, 
                    JPanelExtentedImage.ImageFileIcon.getIconWidth(),
                    JPanelExtentedImage.ImageFileIcon.getIconHeight());
            //newxPanel.setOpaque(true);
            this.repaint();
            // αλλάζω την ενεργοποίηση των πλήκτρων διαχείρισης φωτογραφίας
            RemovePhotoButton.setEnabled(true);
            AddPhotoButton.setEnabled(false);
        }
}//GEN-LAST:event_AddPhotoButtonActionPerformed

    private void RemovePhotoButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_RemovePhotoButtonActionPerformed
        // διέγραψε το αρχείο εικόνας από τον δίσκο και θέσε ImageFilePath ="" 
        JPanelExtentedImage.deleteFileInImageFilePath();
        // εαν υπάρχει το image panel το διαγράφω
        if (!(newxPanel==null)){
            UpdateEntryPanel.remove(newxPanel);
            newxPanel=null;
            this.repaint();
            // διαγράφω την εικόνα από την στατική μεταβλητή
            JPanelExtentedImage.ImageFileIcon=null;
        }
        // αλλάζω την κατάσταση των πλήκτρων διαχείρισης φωτογραφίας
        AddPhotoButton.setEnabled(true);
        RemovePhotoButton.setEnabled(false);
    }//GEN-LAST:event_RemovePhotoButtonActionPerformed

    private void UpdateEntryButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_UpdateEntryButtonActionPerformed
        formRestaurantUpdate();
}//GEN-LAST:event_UpdateEntryButtonActionPerformed

    private void AreaComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_AreaComboBoxItemStateChanged
        // TODO add your handling code here:
    }//GEN-LAST:event_AreaComboBoxItemStateChanged

    private void PriceRangeComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_PriceRangeComboBoxItemStateChanged
        // TODO add your handling code here:
    }//GEN-LAST:event_PriceRangeComboBoxItemStateChanged

    private void CategoryListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_CategoryListValueChanged
        // TODO add your handling code here:
    }//GEN-LAST:event_CategoryListValueChanged

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
        TerminateQuestion.windowClosing(this);
    }//GEN-LAST:event_formWindowClosing

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AdminUpdateRestaurant2Gui().setVisible(true);
            }
        });
    }
    
    public ListModel categoryListModel(){
        //δημιουργώ περιεχόμενα για το category Jlist
        return  CreateCategoryListModel.getModel();
    }
    
    public ComboBoxModel areaComboBoxModel(){
        //δημιουργώ περιεχόμενα για το Area ComboBox
        return CreateAreaComboBoxModel.getModel();
    }
    
    public ComboBoxModel priceComboBoxModel(){
        //δημιουργώ περιεχόμενα για το PriceRange ComboBox
        return  CreatePriceRangeComboBoxModel.getModel();
    }
    

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton AddPhotoButton;
    private javax.swing.JButton AddRestaurantButton;
    private javax.swing.JLabel AddressLabel;
    private javax.swing.JTextField AddressTextField;
    private javax.swing.JComboBox AreaComboBox;
    private javax.swing.JLabel AreaLabel;
    private javax.swing.JPanel BackgroundColorPanel;
    private javax.swing.JLabel CategoryLabel;
    private javax.swing.JList CategoryList;
    private javax.swing.JScrollPane CategoryScrollPane;
    private javax.swing.JButton DeleteRestaurantButton;
    private javax.swing.JLabel DescriptionLabel;
    private javax.swing.JTextArea DescriptionTextArea;
    private javax.swing.JButton ExitButton;
    private javax.swing.JLabel InformationLabel;
    private javax.swing.JTextField InformationTextField;
    private javax.swing.JLabel LogoLabel;
    private javax.swing.JLabel NameLabel;
    private javax.swing.JTextField NameTextField;
    private javax.swing.JLabel PhoneLabel;
    private javax.swing.JTextField PhoneTextField;
    private javax.swing.JLabel PhotoLabel;
    private javax.swing.JComboBox PriceRangeComboBox;
    private javax.swing.JLabel PriceRangeLabel;
    private javax.swing.JButton RemovePhotoButton;
    private javax.swing.JLabel TitleLabel;
    private javax.swing.JButton UpdateEntryButton;
    private javax.swing.JPanel UpdateEntryPanel;
    private javax.swing.JButton UpdateRestaurantButton;
    private javax.swing.JScrollPane jScrollPane1;
    // End of variables declaration//GEN-END:variables

     // αρχικοποίηση των μεταβλητών της φόρμας
    private void formRestaurantInit(){
        
        // ανακαλώ από την βάση δεδομένων το εστιατόριο με ID=currentRestaurantID
        try {
            DBManager db = new DBManager();
            formRestaurant = db.getRestaurantById(currentRestaurantID);
            db.closeDB();
        } catch (SQLException ex) {
            Logger.getLogger(AdminUpdateRestaurant2Gui.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        // θέτω αρχικές τιμές
        JPanelExtentedImage.ImageFileIcon=null;
        JPanelExtentedImage.ImageFilePath=formRestaurant.getPhoto();
        //αρχικοποιώ τα πλήκρα 
        AddPhotoButton.setEnabled(true);
        RemovePhotoButton.setEnabled(false);
        // εάν το path για την φωτογραφία δεν είναι κενό
        if (!(JPanelExtentedImage.ImageFilePath.isEmpty())){
            // διαβάζω την εικόνα από τον δίσκο
            JPanelExtentedImage.ImageFileIcon= new ImageIcon(JPanelExtentedImage.ImageFilePath);
            // δημιουργώ νέο image panel 
            // διαβάζει την εικόνα από τον δίσκο
            newxPanel = new JPanelExtentedImage();
            // προσθέτω το image panel στην φόρμα
            UpdateEntryPanel.add(newxPanel);
            // θέτω τις συντεταγμένες του νέου panel στην φόρμα
            newxPanel.setBounds(140, 310, 
                    JPanelExtentedImage.ImageFileIcon.getIconWidth(),
                    JPanelExtentedImage.ImageFileIcon.getIconHeight());
            //newxPanel.setOpaque(true);
            this.repaint();
            // αλλάζω την ενεργοποίηση των πλήκτρων διαχείρισης φωτογραφίας
            RemovePhotoButton.setEnabled(true);
            AddPhotoButton.setEnabled(false);
        }
        // θέτω μία μόνο δυνατότητα επιλογής από την λίστα
        CategoryList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        // βρίσκω ποιο item της λίστας συμπίπτει με την κατηγορία του εστιατορίου
        CategoryList.setSelectedIndex(FindListItem.ById(CategoryList.getModel(), formRestaurant.getCategoryId()));
        // υποχρεώνω την λίστα να περιλάβει την επιλεγμένη κατηγορία στο οπτικό κομμάτι της 
        CategoryList.ensureIndexIsVisible(CategoryList.getSelectedIndex());
        
        // βρίσκω ποιο item του ComboBox συμπίπτει με την περιοχή του εστιατορίου
        AreaComboBox.setSelectedIndex(FindComboBoxItem.ById(AreaComboBox.getModel(), formRestaurant.getAreaId()));
        
        // βρίσκω ποιο item του ComboBox συμπίπτει με τo εύρος τιμών του εστιατορίου        
        PriceRangeComboBox.setSelectedIndex(FindComboBoxItem.ById(PriceRangeComboBox.getModel(), formRestaurant.getPriceRangeId()));
        
        // θέτω αρχικές τιμές στα πεδία
        NameTextField.setText(formRestaurant.getRestaurantName());
        AddressTextField.setText(formRestaurant.getAddress());
        PhoneTextField.setText(formRestaurant.getPhone());
        DescriptionTextArea.setText(formRestaurant.getDescription());
        InformationTextField.setText(formRestaurant.getInformation());
    }
    
    // καταχώρηση των μεταβλητών της φόρμας στη βάση δεδομένων
    private void formRestaurantUpdate(){
        
        // μεταβλητή flag που καταγράφει λάθη στα πεδία της φόρμας
        boolean errors=false;
        // αρχικοποίηση μηνύματος λαθών
        String errorMessage="";
        
        // ανάκληση τιμών από την φόρμα
        ComplexItem.cBoxItem areaSelected =(ComplexItem.cBoxItem) AreaComboBox.getSelectedItem();
        ComplexItem.cBoxItem priceRangeSelected = (ComplexItem.cBoxItem) PriceRangeComboBox.getSelectedItem();
        ComplexItem.cListItem categorySelected =(ComplexItem.cListItem) CategoryList.getSelectedValue();
        
        // έλεγχος λάθους καταχώρηση το όνομα του εστιατορίου
        if (NameTextField.getText().trim().isEmpty()){
            errors = true;
            errorMessage+="\nTo όνομα του εστιατορίου δεν επιτρέπεται να είναι κενό" ;
        }
        
        // έλεγχος λαθών
        if (errors){ // εάν υπάρχουν λάθη 
            ErrorMessage.show(this, errorMessage);
        } else { // εάν ΔΕΝ υπάρχουν λάθη
            //ανάκληση τιμών από τη φόρμα
            formRestaurant.setRestaurantName(NameTextField.getText());
            formRestaurant.setAddress(AddressTextField.getText());
            formRestaurant.setPhone(PhoneTextField.getText());
            formRestaurant.setDescription(DescriptionTextArea.getText());
            formRestaurant.setInformation(InformationTextField.getText());
            formRestaurant.setPhoto(JPanelExtentedImage.ImageFilePath);
            formRestaurant.setCategoryId(categorySelected.getIdItem());
            formRestaurant.setAreaId(areaSelected.getIdItem());
            formRestaurant.setPriceRangeId(priceRangeSelected.getIdItem());
            try {
                // καταχώρηση του εστιατορίου στη βάση δεδομένων
                DBManager db = new DBManager();
                db.updateRestaurant(formRestaurant);
                //db.addRestaurant(formRestaurant);
                db.closeDB();
                // μήνυμα επιτυχούς εγγραφής στην βάση δεδομένων
                InformationMessage.show(this,"Η εγγραφή των αλλαγών του εστιατορίου ολοκληρώθηκε");
            } catch (SQLException ex) {
                // μήνυμα ανεπιτυχούς εγγραφής στην βάση δεδομένων
                InformationMessage.show(this,"Η εγγραφή των αλλαγών του εστιατορίου δεν ολοκληρώθηκε,"+
                            "\n προέκυψε κάποιο πρόβλημα στην βάση δεδομένων");
                Logger.getLogger(AdminAddRestaurantGui.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    
}
